package main

import "fmt"

//定义一个 Shape 接口，包含 Area() 和 Perimeter() 两个方法。然后创建 Rectangle 和 Circle 结构体，实现 Shape 接口。
// 在主函数中，创建这两个结构体的实例，并调用它们的 Area() 和 Perimeter() 方法。
type Shape interface {
	Area()
	Perimeter()
}

type Rectangle struct {
}

type Circle struct {
}

func (r *Rectangle) Area() {
	fmt.Println("我是结构体方法Area")
}
func (r *Rectangle) Perimeter() {
	fmt.Println("我是结构体方法Perimeter")
}

func (r *Circle) Area() {
	fmt.Println("我是结构体方法Circle")
}

func (r *Circle) Perimeter() {
	fmt.Println("我是结构体方法Perimeter")
}

//使用组合的方式创建一个 Person 结构体，包含 Name 和 Age 字段，再创建一个 Employee 结构体，
// 组合 Person 结构体并添加 EmployeeID 字段。为 Employee 结构体实现一个 PrintInfo() 方法，输出员工的信息。

type Person struct {
	Name string
	Age  int
}
type Employee struct {
	EmployeeID int
	Person
	Name string
}

func (e *Employee) PrintInfo() {
	fmt.Println("员工id：", e.EmployeeID)
	fmt.Println("员工姓名：", e.Name)
	fmt.Println("员工年纪：", e.Age)
}

func main() {
	r := &Rectangle{}
	r.Area()
	r.Perimeter()
	c := &Circle{}
	c.Area()
	c.Perimeter()
	// 第二部分考核
	e := &Employee{EmployeeID: 1, Person: Person{Name: "小乐", Age: 12}, Name: "别名花花"}
	fmt.Println("姓名是：", e.Person.Name)
	fmt.Println("年纪：", e.Age)
	fmt.Println("别名是：", e.Name)
	fmt.Println("下面是结构体内容")
	e.PrintInfo()
}
